home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
fdimg
/
oh!.2hd
/
OH!DEN_B.LZH
/
TOOLS
/
CDC
/
CDCSRC.LZH
/
CDC.S
< prev
next >
Wrap
Text File
|
1995-03-20
|
60KB
|
2,929 lines
.include tnb.mac
.include iocscall.mac
.include doscall.mac
TnLC_=8000 *今のカウント
TrkMax = 400
StartStatio:*******************常駐部
SS:
jbra init
head:
HEAD1 = 'CDCT'
HEAD2 = 'B100'
.dc.l HEAD1
.dc.l HEAD2
.even
.dc.l 'CDC_trap'
st:
TRP5:*=========================================
* ($25)[$0094]
* TRAP 5
*
TRP5_ = $0094.w
jbra tr5s
tr5tabs:
.dc.l tr5_00,tr5_01,tr5_02,tr5_03,tr5_04,tr5_05,tr5_06,tr5_07
.dc.l tr5_08,tr5_09,tr5_0a,tr5_0b,tr5_0c,tr5_0d,tr5_0e,tr5_0f
.dc.l tr5_10,tr5_11,tr5_12,tr5_13,tr5_14,tr5_15,tr5_16,tr5_17
.dc.l tr5_18,tr5_19,tr5_1a,tr5_1b,tr5_1c,tr5_1d,tr5_1e,tr5_1f
.dc.l tr5_20,tr5_21,tr5_22,tr5_23,tr5_24,tr5_25,tr5_26,tr5_27
.dc.l tr5_28,tr5_29,tr5_2a,tr5_2b,tr5_2c,tr5_2d,tr5_2e,tr5_2f
.dc.l tr5_30,tr5_31,tr5_32,tr5_33,tr5_34,tr5_35,tr5_36,tr5_37
.dc.l tr5_38,tr5_39,tr5_3a,tr5_3b,tr5_3c,tr5_3d,tr5_3e,tr5_3f
TRP5_JMP:
jmp $00000000.l
PWSW:*=========================================
* ($42)[$0108]
* フロントスイッチ
*
PWSW_ = $0108.w
jbsr _CDCOFF
jbsr ScsiUseChk
jbne PWSW_JMP
movem.l d0-d2/a0-a2,-(sp)
jbsr _ZeroUnit
movem.l (sp)+,d0-d2/a0-a2
PWSW_JMP:
jmp $00000000.l
MFP:*=========================================
* ($4C)[$0130]
* MFP キーシリアル
*
MFP_ = $0130.w
tst.w _KeySwi
jbeq MFP_JMP
move.l d7,-(sp)
move.b $00E8802F,d7
btst #7,d7
jbeq @f *押された
clr.w _KeyPush
jbra MP_L1
@@:
move.w #1,_KeyPush
jbsr CmdCord
jbeq MP_L1 CDC用キーでない
movem.l d0-d1,-(sp)
move.b $800+$0E,d0
swap d0
move.w $800+$0A,d0
andi.l #$000FE003,d0
cmp.l _SFTK(pc),d0
bne MP_L2
tst.w MFP_cmd
beq MP_L4
tst.w MFP_cmd+2
beq @f
move.w MFP_cmd+2(pc),MFP_cmd
@@: move.w d7,MFP_cmd+2
bra MP_L3
MP_L4: move.w d7,MFP_cmd
MP_L3: movem.l (sp)+,d0-d1
move.l (sp)+,d7
rte
MP_L2:
movem.l (sp)+,d0-d1
MP_L1:
move.l (sp)+,d7
MFP_JMP:
jmp $00000000.l
MFP_BAK:
.dc.l 0
MFP_cmd:
.dc.w 0 *コマンドキーバッファ
.dc.w 0 *コマンドキーバッファ
INTVCS: *-----------------------------
* [$FF25]
* 設定&アドレス返し
INTVCS_ = $FF25
move.l d0,-(sp)
move.w (a6),d0 * ベクタL
cmpi.w #$004C,d0 *キー入力か?
jbne @f
move.l (sp)+,d0
move.l MFP_JMP+2(pc),d0
move.l 2(a6),MFP_JMP+2
rts
@@: move.l (sp)+,d0
INTVCS_JMP:
jmp 0.l
INTVCG: *-----------------------------
* [$FF35]
* アドレス返し
INTVCG_ = $FF35
move.l d0,-(sp)
move.w (a6),d0 * ベクタL
cmpi.w #$004C,d0 *キー入力か?
jbne @f
move.l (sp)+,d0
move.l MFP_JMP+2(pc),d0
rts
@@: move.l (sp)+,d0
INTVCG_JMP:
jmp 0.l
BITSNS:*=========================================
* ($104)[$0410]
* IOCS $04 BITSNS
*
BITSNS_ = $0410
tst.w IocsSwc
jbne BITSNS_JMP
tst.w MFP_cmd
jbne @f
jbsr NokeySeek
jbra BS_EE
@@:
move.w #1,IocsSwc
movem.l d0-d7/a0-a6,-(sp)
move.w MFP_cmd(pc),d0
move.w MFP_cmd+2(pc),MFP_cmd
clr.w MFP_cmd+2
jbsr KeySns
movem.l (sp)+,d0-d7/a0-a6
BS_EE:
jbsr LoopChk
clr.w IocsSwc
BITSNS_JMP:
jmp $00000000.l
B_KEYSNS:*=========================================
* ($101)[$0404]
* IOCS $01 B_KEYSNS
*
B_KEYSNS_ = $0404
jbsr B_KEYSNS_JMP
tst.w IocsSwc
jbeq @f
rts
@@:
move.w #1,IocsSwc
tst.w MFP_cmd
jbne @f
jbsr NokeySeek
jbra BKS_L3
@@:
movem.l d0-d7/a0-a6,-(sp)
move.w MFP_cmd(pc),d0
move.w MFP_cmd+2(pc),MFP_cmd
clr.w MFP_cmd+2
bsr KeySns
movem.l (sp)+,d0-d7/a0-a6
BKS_L3:
tst.w _KeySwi
jbeq BKS_L2
tst.l d0
jbne @f
jbsr NokeySeek
jbra BKS_L2 *0なら終わり
@@:
movem.l d0-d7/a0-a6,-(sp)
move.l d0,d7
lsr.w #8,d7
jbsr CmdCord
jbeq BKS_L1 CDC用キーでない
move.l d0,d7
move.b $800+$0E,d0
swap d0
move.w $800+$0A,d0
andi.l #$000FE003,d0
cmp.l _SFTK(pc),d0
bne BKS_L1
move.l d7,d0
lsr.w #8,d0
jbsr KeySns
jbne BKS_L1
*あった (=キーパッファに入れない)
jbsr B_KEYSNS_JMP *念のため呼ぶ(file関係の時にキーパッファーが使われる?)
tst.l d0
jbeq BKS_L4
IOCS _B_KEYINP
BKS_L4: movem.l (sp)+,d0-d7/a0-a6
clr.w IocsSwc
moveq #0,d0
rts
BKS_L1:
movem.l (sp)+,d0-d7/a0-a6
BKS_L2:
jbsr LoopChk
clr.w IocsSwc
rts
B_KEYSNS_JMP:
jmp $00000000.l
KeySnsEM:
.dc.w 0 *0:KEY 1:TRAP
KeySns:*=========================================
*
* d0=キーボードコード
*
*[戻り値] beq : 何かあった (=キーパッファに入れない)
* bne : 何もなし
*
move.b d0,d7
andi.l #$007F,d7
jbeq EE
lea KST(pc),a0
add.w d7,d7
adda.w (a0,d7.w),a0
jmp (a0)
EE: moveq #1,d0
rts
Kt: .macro A,B,C,D
.dc.w A-KST,B-KST,C-KST,D-KST
.endm
KST:
Kt EE,Tesc,EE,EE *│未定義│ ESC │ 1! │ 2"
Kt EE,EE,EE,EE *│ 3# │ 4$ │ 5% │ 6&
Kt Tsuz7,Tsuz8,Tsuz9,Trnd *│ 7' │ 8( │ 9) │ 0
Kt Tauto,EE,EE,Tbs *│ -= │ ^~ │ \| │ BS
Kt Ttab,EE,EE,Te *│ TAB │ Q │ W │ E
Kt Tr,EE,EE,Tsuz4 *│ R │ T │ Y │ U
Kt Tsuz5,Tsuz6,Trew_,EE *│ I │ O │ P │ @`
Kt Trvtm,Tenter,EE,EE *│ [ │ [CR] │ A │ S
Kt EE,EE,EE,EE *│ D │ F │ G │ H
Kt Tsuz1,Tsuz2,Tsuz3,Tff_ *│ J │ K │ L │ ;+
Kt EE,Ttm,EE,EE *│ :* │ ] │ Z │ X
Kt EE,EE,EE,EE *│ C │ V │ B │ N
Kt Tsuz0,Tmemview,Tmem,Tequ *│ M │ ,< │ .> │ /?
Kt Tenter,EE,Thome,Tdel *│ _ │ [SP] │ HOME │ DEL
Kt Trew,Tff,Tundo,TledL *│Rollup│Rolldn│ UNDO │ ←
Kt TledU,TledR,TledD,Tclr *│ ↑ │ → │ ↓ │ CLR
Kt Trnd,Tauto,Trew_,Tsuz7 *│ / │ * │ - │ 7
Kt Tsuz8,Tsuz9,Tff_,Tsuz4 *│ 8 │ 9 │ + │ 4
Kt Tsuz5,Tsuz6,Tequ,Tsuz1 *│ 5 │ 6 │ = │ 1
Kt Tsuz2,Tsuz3,Tenter,Tsuz0 *│ 2 │ 3 │ ENTER│ 0
Kt Tmemview,Tmem,Tkigou,Ttouroku *│ , │ . │ 記号 │ 登録
Kt EE,EE,EE,EE *│ HELP │ XF1 │ XF2 │ XF3
Kt EE,EE,EE,EE *│ XF4 │ XF5 │ かな │ ローマ字
Kt EE,EE,EE,EE *│コード│ CAPS │ INS │ ヒカナ
Kt EE,EE,EE,EE *│ 全角 │ BREAK│ COPY │ F1
Kt EE,EE,EE,EE *│ F2 │ F3 │ F4 │ F5
Kt EE,EE,EE,EE *│ F6 │ F7 │ F8 │ F9
Kt EE,EE,EE,EE *│ F10 │未定義│未定義│未定義
Kt EE,EE,EE,EE *│ SHIFT│ CTRL │ OPT.1│ OPT.2
Kt EE,EE,EE,EE *│未定義│未定義│未定義│未定義
Kt EE,EE,EE,EE *│未定義│未定義│未定義│未定義
Kt EE,EE,EE,EE *│未定義│未定義│未定義│未定義
CmdCord:***********************
*
*in d7=キーデータ
*out d7=キーデータ 0ならCDC用でない
* beq ならCDC用でない
*
movem.l d0/a0,-(sp)
moveq #0,d0
move.b d7,d0
lsr.w #3,d0 * /8
lea CmdC_List(pc),a0
btst.b d7,(a0,d0.w)
jbne CmdC_L1
movem.l (sp)+,d0/a0
moveq.l #0,d7
rts
CmdC_L1:
movem.l (sp)+,d0/a0
andi.l #$00FF,d7
rts
defccl: .macro
.dc.b %0000_0010 **│ 6& │ 5% │ 4$ │ 3# │ 2" │ 1! │ ESC │未定義
.dc.b %1000_0000 **│ BS │ \| │ ^~ │ -= │ 0 │ 9) │ 8( │ 7'
.dc.b %0001_1001 **│ U │ Y │ T │ R │ E │ W │ Q │ TAB
.dc.b %0001_0000 **│ S │ A │ [CR] │ [ │ @` │ P │ O │ I
.dc.b %0000_0000 **│ ;+ │ L │ K │ J │ H │ G │ F │ D
.dc.b %0000_0010 **│ N │ B │ V │ C │ X │ Z │ ] │ :*
.dc.b %1100_0000 **│ DEL │ HOME │ [SP] │ _ │ /? │ .> │ ,< │ M
.dc.b %1111_1111 **│ CLR │ ↓ │ → │ ↑ │ ← │ UNDO │Rolldn│Rollup
.dc.b %1111_1111 **│ 4 │ + │ 9 │ 8 │ 7 │ - │ * │ /
.dc.b %1111_1111 **│ 0 │ ENTER│ 3 │ 2 │ 1 │ = │ 6 │ 5
.dc.b %0000_1011 **│ XF3 │ XF2 │ XF1 │ HELP │ 登録 │ 記号 │ . │ ,
.dc.b %0000_0000 **│ ヒカナ │ INS │ CAPS │コード│ ローマ字│ かな │ XF5 │ XF4
.dc.b %0000_0000 **│ F5 │ F4 │ F3 │ F2 │ F1 │ COPY │ BREAK│ 全角
.dc.b %0000_0000 **│未定義│未定義│未定義│ F10 │ F9 │ F8 │ F7 │ F6
.dc.b %0000_0000 **│未定義│未定義│未定義│未定義│ OPT.2│ OPT.1│ CTRL │ SHIFT
.dc.b %0000_0000 **│未定義│未定義│未定義│未定義│未定義│未定義│未定義│未定義
.endm
******************* SEEKチェック
NokeySeek:
tst.l _SeekNow
jbpl @f
rts
@@: tst.w _KeyPush
jbeq @f
rts
@@: move.w d0,-(sp)
move.b $800+8,d0
andi.b #$44,d0
movem.w (sp)+,d0
jbeq @f
rts
@@:
NokeySeek2: *trap#5用name
move.l d0,-(sp)
move.w KeySnsEM(pc),d0 *0;KEY 1;Trap で使用
cmp.w _SeekNowMd(pc),d0
jbne MNkS_L1
movem.l d1-d7/a0-a6,-(sp)
move.w #1,IocsSwc
moveq #0,d0
move.w _SeekNowTk(pc),d0
tst.w _RndMode
jbne @f
tst.w _ReptMode
jbne @f
tst.w _MemLong
jbne @f
moveq #-1,d0
@@:
move.l d0,-(sp)
move.w _SeekNowTk(pc),d0
add.w d0,d0
add.w d0,d0
lea _ListStTm,a0
move.l (a0,d0.w),-(sp)
move.l _SeekNow(pc),-(sp)
bsr _addtime
addq.l #8,sp
move.l d0,-(sp)
jbsr _CdPlay
addq.l #8,sp
move.l #-1,_SeekNow
clr.w _PauseMode *0:特に 1:ポーズ中
jbsr _MemChkT
jbsr _B_KLE_D
clr.w IocsSwc
movem.l (sp)+,d1-d7/a0-a6
clr.w _TsekSw *連続シーク値
MNkS_L1:
move.l (sp)+,d0
rts
_CdcModeOn:: *1:運転中
tst.w _CdcMode *1:運転中
jbeq @f
rts
@@: move.w #-1,_CdcMode *1:運転中
move.w #1,_CDIN
rts
******************移動関係
TledL:
jbsr _CdcModeOn
move.l #-1,TledMS
move.l _DRAWADDS(pc),d0
andi.w #$7F,d0
jbne @f
moveq #0,d0
rts
@@:
TledMove:
jbsr FnkBerChk
jbeq @f
jbsr KillLeds
move.l TledMS,d0
add.l d0,_DRAWADDS
jbsr DrawLeds
@@: moveq #0,d0
rts
TledMS:
.dc.l 0
TledR:
jbsr _CdcModeOn
move.l #1,TledMS
move.l _DRAWADDS(pc),d0
andi.w #$7F,d0
cmpi.w #128-(36+1+10),d0
jbcs TledMove
moveq #0,d0
rts
TledU:
jbsr _CdcModeOn
move.l #-$800,TledMS
move.l _DRAWADDS(pc),d0
andi.l #$1F800,d0
jbne TledMove
moveq #0,d0
rts
TledD:
jbsr _CdcModeOn
move.l #$800,TledMS
move.l _DRAWADDS(pc),d0
andi.l #$1F800,d0
cmpi.l #$800*63,d0
jbcs TledMove
moveq #0,d0
rts
Ttab:**********[TAB]
jbsr _CdcModeOn
not.w _DisForce
moveq #0,d0
rts
Ttouroku:**********[登録]
jbsr _CdcModeOn
jbsr _ChkCdRom
jbsr _CdListRead
jbsr _MemChkT
jbra _B_KLE_D
Tenter:******[ENTER]
jbsr _CdcModeOn
jbsr _ChkCdRom
clr.w _PauseMode *0:特に 1:ポーズ中
clr.w _ReptMode *0:ノーマル 1:リピート
clr.w _BgmMode *0:ノーマル 1:BGM
jbsr Tent_sub
jbra _B_KLE_D
Tent_sub:
tst.w _CDIN
jbne @f
rts
@@: move.w _MemLong,d0
jbeq Tes_J1
*めもりー
move.w #-1,_MemMode
clr.w _MemPt
jbsr _DisSuuziCalc
move.l d0,d7
jbeq Tes_J2
move.l _CdTrak(pc),d0
cmp.l d0,d7
jbhi Tes_J2 *d1<=d0max
move.l d7,-(sp)
move.l d7,-(sp)
jbsr _CdPlay
addq.l #8,sp
move.l d0,-(sp)
jbsr _MemChkT
move.l (sp)+,d0
rts
Tes_J2:
moveq #0,d0
move.b _MemSock(pc),d0 *メモリの1つめを再生
move.l d0,-(sp)
move.l d0,-(sp)
jbsr _CdPlay
addq.l #8,sp
rts
Tes_J1:
jbsr _DisSuuziCalc
move.l d0,d7
jbeq Tes_L1
move.l _CdTrak(pc),d0
@@: cmp.l d0,d7
jbhi Tes_L1 *d1<=d0max
@@: move.l #-1,-(sp)
move.l d7,-(sp)
jbsr _CdPlay
addq.l #8,sp
rts
Tes_L1: jbsr _CdPlay_all
rts
Tequ:******* [=]
* ストップ
jbsr _CdcModeOn
jbsr _ChkCdRom
tst.w _TrkNo
jbne @f
jbra _B_KLE_D
@@:
tst.w _CDIN
jbeq _B_KLE_D *err end
move.l _plyinf,d0
cmpi.b #$11,d0
jbne Tcont
*stop
jbsr _StpDsk
move.w #-1,_PauseMode *0:特に 1:ポーズ中
jbra _B_KLE_D
Tcont: *cont
jbsr _Resume
clr.w _PauseMode *0:特に 1:ポーズ中
jbra _B_KLE_D
Tclr:********* [CLR]
jbsr _CdcModeOn
jbsr _ChkCdRom
jbsr _ZeroUnit
clr.w _AutoMode *0:ノーマル 1:オート
clr.w _RndMode *0:ノーマル 1:ランダム
jbsr _FlgClrS
**
clr.l _SetNameAdd
jbra _B_KLE_D
_FlgClrS:
clr.w _ReptMode *0:ノーマル 1:リピート
clr.w _MemMode *0:ノーマル 1:メモリ
clr.w _BgmMode *0:ノーマル 1:BGM
clr.w _PauseMode *0:特に 1:ポーズ中
clr.w _TrkNo
clr.w _TrkNoS
clr.w _DisSuuzi10 * LED用数字クリア
move.w #-1,_MemPt
move.w #-1,_RndPt
rts
.globl _FlgClr
_FlgClr:
jbsr _FlgClrS
jbsr _B_KLE_D2
rts
*--------------曲ステップ
Trew:********* バック
jbsr _CdcModeOn
jbsr _ChkCdRom
clr.w _PauseMode *0:特に 1:ポーズ中
clr.w _BgmMode *0:ノーマル 1:BGM
tst.w _CDIN
jbne @f
moveq #0,d0 *err
rts
@@: move.l _plyinf+8,d0 *plyinf.time
cmpi.l #$0000_0010,d0
jbcc @f
move.l #-1,-(sp)
jbsr _CdPlay_restart
addq.l #4,sp
movem.l d0-d7/a0-a6,-(sp) *ダブルクリック対策
move.w MFP_cmd(pc),d0
move.w MFP_cmd+2(pc),MFP_cmd
clr.w MFP_cmd+2
bsr KeySns
movem.l (sp)+,d0-d7/a0-a6
jbra _B_KLE_D
@@:
move.l #0,-(sp)
jbsr _CdPlay_restart
addq.l #4,sp
jbra _B_KLE_D
Tff:********* 進む
jbsr _CdcModeOn
jbsr _ChkCdRom
clr.w _PauseMode *0:特に 1:ポーズ中
clr.w _BgmMode *0:ノーマル 1:BGM
move.l #1,-(sp)
jbsr _CdPlay_restart
addq.l #4,sp
jbra _B_KLE_D
*--------------時間スキャン(未使用)
*Trews:********* バック
* jbsr _CdcModeOn
* jbsr _ChkCdRom
* clr.w _PauseMode *0:特に 1:ポーズ中
* clr.w _BgmMode *0:ノーマル 1:BGM
* move.l #-1,-(sp)
* jbsr _ScanDisp
* addq.l #4,sp
* jbra _B_KLE_D
*Tffs:********* 進む
* jbsr _CdcModeOn
* jbsr _ChkCdRom
* clr.w _PauseMode *0:特に 1:ポーズ中
* clr.w _BgmMode *0:ノーマル 1:BGM
* move.l #1,-(sp)
* jbsr _ScanDisp
* addq.l #4,sp
* jbra _B_KLE_D
*--------------時間シーク
Trew_:********* バック
jbsr _CdcModeOn
jbsr _ChkCdRom
tst.w _CDIN
jbne @f
rts
@@: addq.w #1,_TsekSw
move.l #-1,-(sp)
jbsr _SeekDisp
addq.l #4,sp
tst.l d0
jbeq _B_KLE_D
move.w KeySnsEM(pc),_SeekNowMd *0;KEY 1;Trap で使用
moveq #0,d1
jbra _B_KLE_S
Tff_:********* 進む
jbsr _CdcModeOn
jbsr _ChkCdRom
tst.w _CDIN
jbne @f
rts
@@: addq.w #1,_TsekSw
move.l #1,-(sp)
jbsr _SeekDisp
addq.l #4,sp
tst.l d0
jbeq _B_KLE_D
move.w KeySnsEM(pc),_SeekNowMd *0;KEY 1;Trap で使用
moveq #1,d1
jbra _B_KLE_S
_TsekSw:
.dc.w 0 *連続シーク値
Tundo:********* [UNDO]
jbsr _CdcModeOn
jbsr _ChkCdRom
jbsr _DisSuuziCalc
move.l d0,d7
jbeq Tundo_1
move.l _CdTrak(pc),d0
cmp.l d0,d7
jbhi Tundo_1 *d1<=d0max
jbsr _FlgClrS
clr.w _AutoMode *0:ノーマル 1:オート
clr.w _RndMode *0:ノーマル 1:ランダム
move.w #-1,_ReptMode *0:ノーマル 1:リピート
move.l d7,-(sp)
move.l d7,-(sp)
jbsr _CdPlay
addq.l #8,sp
jbsr _MemChkT
jbra _B_KLE_D
Tundo_1:
tst.w _TrkNo
jbne @f
moveq #0,d0
rts
@@: clr.w _AutoMode *0:ノーマル 1:オート
clr.w _RndMode *0:ノーマル 1:ランダム
move.w #-1,_RndPt
clr.w _MemMode *0:ノーマル 1:メモリ
clr.w _BgmMode *0:ノーマル 1:BGM
clr.w _PauseMode *0:特に 1:ポーズ中
clr.w _DisSuuzi10 * LED用数字クリア
not.w _ReptMode *0:ノーマル 1:リピート
jbra _B_KLE_D
Tauto:********* [*]auto
jbsr _CdcModeOn
jbsr _ChkCdRom
clr.w _PauseMode *0:特に 1:ポーズ中
clr.w _ReptMode *0:ノーマル 1:リピート
not.w _AutoMode *0:ノーマル 1:オート
clr.w _BgmMode *0:ノーマル 1:BGM
tst.w _TrkNo
jbne _B_KLE_D
jbsr Tent_sub *演奏
jbra _B_KLE_D
Trnd:********* [/] rand
jbsr _CdcModeOn
jbsr _ChkCdRom
tst.w _RndMode *0:ノーマル 1:ランダム
jbne Trnd_L1
*ランダムスタート
move.w #-1,_RndMode *0:ノーマル 1:ランダム
clr.w _MemMode *0:ノーマル 1:メモリ
clr.w _PauseMode *0:特に 1:ポーズ中
clr.w _ReptMode *0:ノーマル 1:リピート
clr.w _BgmMode *0:ノーマル 1:BGM
jbsr _CdPlay_Rnd2
jbsr _MemChkT
jbra _B_KLE_D
Trnd_L1:
*ランダム停止(その曲終われば止まる)
clr.w _RndMode *0:ノーマル 1:ランダム
clr.w _MemMode *0:ノーマル 1:メモリ
clr.w _ReptMode *0:ノーマル 1:リピート
clr.w _BgmMode *0:ノーマル 1:BGM
move.w #-1,_RndPt
jbra _B_KLE_D
Tdel:********* [DEL]
jbsr _CdcModeOn
jbsr _ChkCdRom
tst.w _MemLong
jbne @f
rts
@@: subq.w #1,_MemLong *メモリながさ 0以外ならMEMORY
jbeq _B_KLE_D
move.w _MemLong(pc),_MemPtV *確認表示用メモリポインタ
subq.w #1,_MemPtV *確認表示用メモリポインタ
jbsr _MemChkT
jbsr _B_KLE_M
clr.w _LEDVMOD
jbsr _WaitCC *今の1/100s
moveq #0,d0
rts
Tmem:************* [.] memory
jbsr _CdcModeOn
jbsr _ChkCdRom
jbsr _DisSuuziCalc
move.l d0,d7
jbeq _B_KLE_D
move.l _CdTrak(pc),d0
@@: cmp.l d0,d7
jbls @f *d1<=d0max
jbra _B_KLE_D
@@:
lea _MemSock(pc),a1
move.w _MemLong(pc),d0
cmpi.w #100-1,d0
jbcs @f
jbra _B_KLE_D
@@:
move.b d7,0(a1,d0.w) *登録
move.w _MemLong(pc),_MemPtV *確認表示用メモリポインタ
addq.w #1,_MemLong
jbsr _B_KLE_M
jbsr _MemChkT
clr.w _LEDVMOD
jbsr _WaitCC *今の1/100s
moveq #0,d0
rts
Tmemview:**********[,]
jbsr _CdcModeOn
jbsr _ChkCdRom
tst.w _MemLong
jbne @f
rts
@@: addq.w #1,_MemPtV *確認表示用メモリポインタ
move.w _MemPtV(pc),d0
cmp.w _MemLong(pc),d0 x,y v(y)>=Long
jbcs @f
move.w #-1,_MemPtV *MEM確認表示用メモリポインタ
jbra _B_KLE_D
@@:
jbsr _B_KLE_M
clr.w _LEDVMOD
jbsr _WaitCC *今の1/100s
moveq #0,d0
rts
Ttm: *******[ [ ]
jbsr _CdcModeOn
jbsr _ChkCdRom
tst.w _LEDTMRV
jbne @f
moveq #0,d0
rts
@@: clr.w _LEDTMRV
jbra _B_KLE_D
Trvtm: *******[ ]]
jbsr _CdcModeOn
jbsr _ChkCdRom
tst.w _LEDTMRV
jbeq @f
moveq #0,d0
rts
@@: move.w #-1,_LEDTMRV
jbra _B_KLE_D
Tkigou: ****** [記号入力]
jbsr _CdcModeOn
jbsr _ChkCdRom
jbra _B_KLE_D
Thome: ****** [HOME]
jbsr _CdcModeOn
jbsr _ChkCdRom
jbsr _B_KLE_H
tst.w _CDIN
jbeq ThomeLE
move.l _plyinf,d0 *plyinf.fg
cmpi.b #$11,d0
jbne @f
move.l _plyinf+4,d0 *plyinf.track_no;
move.w d0,_TrkNo
move.w d0,_TrkNoS
jbsr _SetTrkLong
@@: jbsr _MemChkT
ThomeLE:
jbsr _WaitCC *今の1/100s
moveq #0,d0
rts
Tesc: ****** [ESC]
.globl _CDCOFF
_CDCOFF:
jbsr FnkBerChk
jbeq @f
jbsr KillLeds
@@:
clr.w _CdcMode *0:停止中
clr.w _CDIN *0:CDは入っていない 1:入っている
clr.w IocsSwc *白帯で1になったまま終わってしまうともう動かないので初期化
clr.b _CHARBUF *LED文字
rts
Tbs: ****** [BS]
jbsr _CdcModeOn
jbsr _ChkCdRom
tst.w _CdcMode
jbne @f
rts
@@: tst.w _DisMode * 0 ; ノーマル 1 ; 表示させない
jbeq @f
clr.w _DisMode * 0 ; ノーマル 1 ; 表示させない
jbra _B_KLE_D
*rts
@@: *ノーマル
jbsr FnkBerChk
jbeq @f
jbsr KillLeds
@@: move.w #1,_DisMode * 0 ; ノーマル 1 ; 表示させない
rts
******** 数値(?)
Tsuz0: moveq #0,d7
jbra Tsuuzi
Tsuz1: moveq #1,d7
jbra Tsuuzi
Tsuz2: moveq #2,d7
jbra Tsuuzi
Tsuz3: moveq #3,d7
jbra Tsuuzi
Tsuz4: moveq #4,d7
jbra Tsuuzi
Tsuz5: moveq #5,d7
jbra Tsuuzi
Tsuz6: moveq #6,d7
jbra Tsuuzi
Tsuz7: moveq #7,d7
jbra Tsuuzi
Tsuz8: moveq #8,d7
jbra Tsuuzi
Tsuz9: moveq #9,d7
Tsuuzi:
jbsr _CdcModeOn
jbsr _ChkCdRom
move.b _DisSuuzi1,_DisSuuzi10
move.b d7,_DisSuuzi1
jbra _B_KLE_K
Te: ****** [E]
jbsr _CdEje
jbsr _ChkCdRom
jbra _B_KLE_D
.globl _CdEje
_CdEje:
movem.l d3/d4,-(sp)
moveq #0,d4
move.w _SCSI_ID(pc),d4
moveq #$00,d3
SCSI _S_PAMEDIUM
lea.l FgetsPTR(pc),a1
moveq.l #$10,d3
SCSI _S_REQUEST *いらないかも
moveq #$02,d3 *EJECT
SCSI _S_STARTSTOP
movem.l (sp)+,d3/d4
rts
Tr: ****** [R]
jbsr _CdReload
jbsr _ChkCdRom
jbra _B_KLE_D
.globl _CdReload
_CdReload:
movem.l d3/d4,-(sp)
moveq #0,d4
move.w _SCSI_ID(pc),d4
moveq #$00,d3
SCSI _S_PAMEDIUM
lea.l FgetsPTR(pc),a1
moveq.l #$10,d3
SCSI _S_REQUEST *いらないかも
moveq #$03,d3
SCSI _S_STARTSTOP
movem.l (sp)+,d3/d4
rts
_DisSuuziCalc:
**********************
*
*リターン d0=入力されてる数値
*
moveq #0,d0
move.b _DisSuuzi10,d0
move.w d0,d1
lsl.w #3,d0
add.w d1,d0
add.w d1,d0 * x10
moveq #0,d1
move.b _DisSuuzi1,d1
add.w d1,d0
rts
Waiting:*-----------------------------
* タイミング 1秒待ち
*
*//[引数] d1.w=前のタイム($09CC.w)
*[戻り値] blt まだ
* bge キー入力
*
move.w _KeyTD(pc),d1 *前の1/100s
sub.w $09CC.w,d1 *今の1/100s
jbeq Wait_LL
jbcc @f
*cmpi.w #-3000,d1 * -t を有効にしたいなら * を外す
*bge @f * / が、不安定に
add.w #6000,d1
@@:
cmp.w _KeyTDCT(pc),d1 *1秒見る
*blt @f
rts
Wait_LL:
@@: moveq #10,d1
subq.l #1,_TnLC
cmp.l _TnLC(pc),d1 *
rts
_WaitCC:*-----------------------------
move.w $09CC.w,_KeyTD *今の1/100s
move.l #TnLC_,_TnLC *今のカウント
rts
_WaitCC2:*-----------------------------
move.w $09CC.w,d0 *今の1/100s
sub.w _PlyWitT(pc),d0
move.w d0,_KeyTD *ちょっと先にしておく
move.l #TnLC_*3,_TnLC *今のカウント *ちょっと先にしておく
rts
LoopChkSub:*--------------------------------
movem.l d0-d2/a0-a2,-(sp)
jbsr FnkBerChk
jbeq @f
jbsr DrawLeds
@@: movem.l (sp)+,d0-d2/a0-a2
rts
LoopChk:*---------------------------
*
* 危険な割り込み
* 壊れるレジスタ無し
*
tst.w _CdcMode
jbne @f
rts
@@:
movem.l d1,-(sp)
jbsr Waiting
movem.l (sp)+,d1 *ccr壊さないように
jbge @f
rts
@@:
jbsr LoopChkSub
LoopChk_:
****SCSI CHK
jbsr ScsiUseChk
jbeq @f *つかえる
rts
@@:
move.w $09CC.w,_KeyTD *今の1/100s
move.l #TnLC_,_TnLC *今のカウント
movem.l d0-d7/a0-a6,-(sp)
jbsr _ChkCdRom
move.w _PauseMode(pc),d1 *0:特に 1:ポーズ中
jbeq @f
jbsr _B_KLE_D2
jbra TCE
@@:
move.w _BgmMode(pc),d1 *tst
jbeq @f
jbsr _CdPlay_Bgm
jbra TCE
@@:
move.w _ReptMode(pc),d1 *tst
jbeq @f
jbsr _CdPlay_Rept
jbra TCE
@@:
move.w _RndMode(pc),d1 *tst
jbeq @f
jbsr _CdPlay_Rnd
jbra TCE
@@:
move.w _MemMode(pc),d1 *tst
jbeq @f
jbsr _CdPlay_Mem
jbra TCE
@@:
move.w _AutoMode(pc),d1 *tst
jbeq @f
jbsr _CdPlay_Auto
jbra TCE
@@:
jbsr _CdPlay___
TCE: movem.l (sp)+,d0-d7/a0-a6
rts
ScsiUseChk:*-------------------------------
*
* jbeq :使える
* jbne :つかえない
*
movem.l d1/a1,-(sp)
move.l _SCSI_ROMB(pc),a1
move.b $D(a1),d1
andi.b #$F0,d1
jbne SUC_NE
move.b $B(a1),d1
andi.b #$07,d1
jbne SUC_NE
lea $E84040,a1 *DMAC #1
btst.b #3,(a1)
jbne SUC_NE
*lea $E84080,a1 *DMAC #2
*btst.b #3,(a1)
*bne SUC_NE
moveq #0,d1
movem.l (sp)+,d1/a1
rts
SUC_NE:
moveq #-1,d1
movem.l (sp)+,d1/a1
rts
_CdListRead:*--------------------
** 環境変数 CDCLIST チェック **
move.w #-1,-(sp)
DOS _BREAKCK
addq.l #2,sp
move.w d0,_CdLRBC
move.w #2,-(sp)
DOS _BREAKCK
addq.l #2,sp
jbsr _CdListSub
tst.l d0
jbpl @f
clr.b CDCLIST_FILENAME *リストファイル無し
jbra _CdLRER
@@: pea CDCLIST_FILENAME(pc)
clr.l -(sp)
pea CDCLIST_NAME(pc)
DOS _GETENV
lea 12(sp),sp
tst.l d0
jbpl @f
clr.b CDCLIST_FILENAME *リストファイル無し
jbra _CdLRER
@@:
move.w #0,-(sp)
pea CDCLIST_FILENAME(pc)
DOS _OPEN
addq.l #6,sp
tst.l d0
jbmi _CdLRER *エラー
move.w d0,Hendl
move.l d0,-(sp)
bsr _CdListDisp
addq.l #4,sp
clr.l _SetNameAdd
move.l d0,d1
jbpl @f
move.w Hendl(pc),-(sp)
DOS _CLOSE
addq.l #2,sp
jbsr _CdNameClr
jbra _CdLRER
@@:
move.w Hendl(pc),-(sp)
DOS _CLOSE
addq.l #2,sp
move.w _CdLRBC(pc),-(sp)
DOS _BREAKCK
addq.l #2,sp
move.w #1,_CDIN
moveq #0,d0
rts
_CdLRER: *ERR
jbsr _NoTtlFile
move.w _CdLRBC(pc),-(sp)
DOS _BREAKCK
addq.l #2,sp
move.w #1,_CDIN
moveq #-1,d0
rts
_CdLRBC:
.dc.w 0
.include CDRD.s
.include CDRC_.s
.include CDRT.s
.globl _Rand
_Rand: *------------------------------------------
__RAND equ $FE0E
.dc.w __RAND
rts
.globl _Randomize
_Randomize:
*------------------------------------------
__RANDOMIZE equ $FE0C
move.l 4(a7),d0
.dc.w __RANDOMIZE
rts
.globl _Fgets
_Fgets: *------------------------------------------
* ファイルから1行をバッファに読み込み
* Fgets(f)
movea.l 4(sp),a2
move.w #1,-(sp)
move.l #0,-(sp)
move.w a2,-(sp)
DOS _SEEK
addq.l #8,sp
tst.l d0
jbpl @f
moveq #-1,d0 *えらー
rts
@@:
move.l d0,d2 *シークポインタ
move.l #256,-(sp)
pea FgetsPTR(pc)
move.w a2,-(sp)
DOS _READ
lea 10(sp),sp
tst.l d0
jbpl @f
moveq #-1,d0 *エラー
rts
@@:
jbne @f
moveq #0,d0 *0;終了
rts
@@:
lea FgetsPTR(pc),a1
moveq #0,d1
_fgL2:
move.b (a1)+,d0
jbeq _fgL3
cmpi.b #$0d,d0
jbeq _fgL1_
cmpi.b #$0a,d0
jbeq _fgL1
cmpi.b #$80,d0 *全角
jbcs @f
cmpi.b #$9F+1,d0
jbcs _fgL4
@@: cmpi.b #$E0,d0
jbcc _fgL4
addq.w #1,d1
cmpi.w #256,d1
jbcc _fgL3
jbra _fgL2
_fgL4:
move.b (a1)+,d0
addq.w #2,d1
cmpi.w #256,d1
jbcc _fgL3
jbra _fgL2
_fgL3:
clr.b (a1)
move.l #FgetsPTR,d0
rts
_fgL1_:
addq.w #1,d1
_fgL1:
addq.w #1,d1
move.b #0,-1(a1)
move.w #0,-(sp)
move.l d2,-(sp)
move.w a2,-(sp)
DOS _SEEK
move.w #1,-(sp)
move.l d1,-(sp)
move.w a2,-(sp)
DOS _SEEK
lea 16(sp),sp
move.l #FgetsPTR,d0
rts
FgetsPTR:
.ds.b 256 * 読み込み用バッファ
.dc.w 0
.even
_ChkCdRom:*----------------------------------
*
* なにやるもこれを一度コール
* 以下_plyinfに引数がセットされる
*
jbsr _WaitCC *今の1/100s
pea _plyinf(pc)
jbsr _ChkPly
addq.l #4,sp
tst.l d0
jbne ChkCR_NoCd **エラー
jbsr _ChkPlyDisp
move.l _plyinf(pc),d0
cmpi.b #$11,d0
jbeq @f
cmpi.b #$12,d0
jbeq @f
clr.w _TrkNo
@@:
.if 0
tst.w _CddevSw *0: SCSI直接 1:計測IOCTRL
jbne @f
pea _max_(pc)
pea _min_(pc)
pea _leadout_address_(pc)
jbsr _RedTOC *( &leadout_address, &min, &max ) != 0 )
lea 12(sp),sp
tst.l d0
jbne ChkCR_NoCd **エラー
move.l _leadout_address_(pc),d0
cmp.l _CdLong(pc),d0
jbne ChkCR_ChainCd **ちがうCDだ
move.l _max_(pc),d0
cmp.l _O_CdTrak(pc),d0
jbne ChkCR_ChainCd **ちがうCDだ
@@:
.endif
move.w _CDIN(pc),d0 *tst *0:CDは入っていない 1:入っている
jbne @f
jbsr _CdListRead
@@:
rts
ChkCR_NoCd:
move.w _CDIN(pc),d0 *tst *0:CDは入っていない 1:入っている
jbeq @f
clr.w _CDIN *0:CDは入っていない 1:入っている
clr.w _LEDVMOD
clr.w _CdLong *長さ
clr.w _TrkNo
clr.w _TrkNoS
clr.w _DisSuuzi10 * LED用数字クリア
clr.b _CdName *CD名
clr.w _ReptMode *0:ノーマル 1:リピート
clr.w _MemMode *0:ノーマル 1:メモリ
clr.w _BgmMode *0:ノーマル 1:BGM
clr.w _PauseMode *0:特に 1:ポーズ中
clr.w _MemLong *メモリながさ 0以外ならMEMORY
move.w #-1,_MemPt
move.w #-1,_RndPt
@@: rts
ChkCR_ChainCd:
clr.w _LEDVMOD
clr.w _DisSuuzi10 * LED用数字クリア
jbsr _CdListRead
rts
*RedTOC用
_leadout_address_:
.dc.l 0
_min_: .dc.l 0
_max_: .dc.l 0
.include CDRC__.s
.include SCSIC.s
.even
_KeyTD:
.dc.w 0 *前の1/100s
_TnLC:
.dc.l $0000 *カウント
Hendl:
.dc.l 0
_ScscUse:
.dc.w 0 *0;つかっていない
_SeekNow:
.dc.l -1 *-1;non !=;シーク中
_SeekNowTk:
.dc.w 0 *_SeekNow補佐 trakno
_SeekNowMd:
.dc.w 0 *0;KEY 1;Trap で使用
_KeyPush:
.dc.w 0 *なにかキーを押している?
***(commandでも使用)
__COM__:
*-------------------------
* キー関係
*-------------------------
.globl _SFTK
*| 0 0 0 0 OPT.2 OPT.1 CTRL SHIFT | XF3 XF2 XF1 0 0 0 0 0| 0 0 0 0 0 0 XF5 XF4
_SFTK:
.dc.l 1
_KeySwi:
.dc.w 1 *1;キー入力可能 0;不可能
CmdC_List:
defccl
CmdC_ListD:
defccl
*-------------------------
* LED関係
*-------------------------
_LEDVMOD:
.dc.w 0 *0;B_KLE_D,B_KLE_D
*1;B_KLE_M,B_KLE_K
_CHARBUF:
.dcb.b 40,0 *LEDに表示されている文字列
_LEDBUF:
.dcb.b 10*16,$FF *テキスト表示用のパターンバンク
_NAMEBUF:
.dcb.b 40*16,$FF
_DRAWADDS:
*.dc.l $E40000+31*16*$80+2
.dc.l $E40000+29*16*$80+49
_LEDTMRV:
.dc.w 0 *0;ノーマル 1;リバース
_DisForce:
.dc.w 0 * 0 ; ノーマル 1 ; テキストを使っていても表示させる!!
_DisMode:
.dc.w 0 * 0 ; ノーマル 1 ; 表示させない
*-------------------------
* CD(MODE)管理関係
*-------------------------
.globl _CDIN,_BgmStAdds,_BgmEdAdds
_CDIN:
.dc.w 0 *0:CDは入っていない 1:入っている
_TrkNo:
.dc.w 0 *演奏中 トラックナンバー 0;停止
_TrkNoS:
.dc.w 0 *最後に演奏のトラックナンバー
_PauseMode:
.dc.w 0 *0:特に 1:ポーズ中
_CdcMode:
.dc.w 1 *0:停止中 1:運転中
_AutoMode:
.dc.w 0 *0:ノーマル 1:オート
_RndMode:
.dc.w 0 *0:ノーマル 1:ランダム
_ReptMode:
.dc.w 0 *0:ノーマル 1:リピート
_BgmMode:
.dc.w 0 *0:ノーマル 1:BGM
_BgmStAdds:
.dc.l 0
_BgmEdAdds:
.dc.l 0
*-------------------------
* プログラム(RND)関係
*-------------------------
.globl _MemLong,_MemSock
_MemMode:
.dc.w 0 *0:ノーマル 1:メモリー
_MemPt:
.dc.w -1 *メモリポインタ
_MemPtV:
.dc.w 0 *確認表示用メモリポインタ
_MemLong:
.dc.w 0 *メモリながさ 0以外ならMEMORY
_MemSock:
.dcb.b 100,0 *メモリ
.even
_RndPt:
.dc.w -1 *ランダムポインタ
_RndLong:
.dc.w 0 *ランダムテーブルながさ
_RndSock:
.dcb.b TrkMax,0 *ランダムテーブル
.even
*-------------------------
* SCSI直接関係
*-------------------------
.globl _SCSI_ROMB,_SCSI_ID,_CddevSw,_CddDrvNo
_SCSI_ROMB:
.dc.l 0
_SCSI_ID:
.dc.w 6
_CddevSw:
.dc.w 0 *0: SCSI直接 1:計測IOCTRL
_CddDrvNo:
.dc.w 0 *計測IOCTRL用ドライヴNO
*-------------------------
* 内部ワーク関係
*-------------------------
_ExTrak:
.dc.w 0 *1;拡張トラックあり
_PlyWitT:
.dc.w 0 *Ply後の待ちタイム
_KeyTDCT:
.dc.w 100 *カウント 1/100s
_STFLAG:
.dc.w $07 *常駐チェック用
IocsSwc:
.dc.w 0
MuTmMod:
.dc.w 0 *0:ノーマル 1:強引にキーベクタを書き替え
CDCLIST_NAME:
.dc.b 'CDCLIST',0 *タイトルリストファイル用
.even
CDCLIST_FILENAME:
.ds.b 256
.even
*-------------------------------------
* 内部ワーク関係(trapで返す)
*-------------------------------------
*----------列びを変えてはいけない
.globl _CdTrak,_CdLong,_CdName,_ListLong,_ListStTm,_ListName
.dc.w 0
_CdcTrak: .dc.l TrkMax *CDCの最大記憶数
_CdTrak: .dc.l 0 *そのCDの曲数(拡張トラック対応)
_CdLong: .dc.l 0 *長さ
_CdListS: .dc.l 0 *CDLISTにあるなら 1
_CdName: .dcb.b 40,0 *CD名
_ListName: .dcb.b 40*TrkMax,0 *メモリ 40文字まで
_ListLong: .dcb.l TrkMax,0 *ながさ時間 最上位ビットが立って入れば 拡張曲名あり
_ListStTm: .dcb.l TrkMax,0 *スタート時間 最上位ビットが立って入れば データトラック
.even
* ListLongに拡張曲名fgあれば
* _ListLongの後ろからチェック 0xFF0000+曲ナンバーがあるはず
* 対応する_ListStTmにオフセット値がある
* あっても次のものをチェックすること
* 決まった場合対応する(_ListName)+2から拡張曲名がある
*
.globl _O_CdTrak,_O_ListLong,_O_ListStTm,_O_ListTrak
_O_CdTrak: .dc.l 0 *そのCDの本当の曲数
_O_ListLong: .dcb.l 100,0 *各トラックの本当のながさ時間
_O_ListStTm: .dcb.l 100,0 *各トラックの本当のスタート時間 最上位ビットが立って入れば データトラック
_O_ListTrak: .dcb.b 100,0 *本当のトラック を 拡張トラックに
.even
*----------列びを変えてはいけない
*ChkPly用
.globl _plyinf
.dc.w 0 *CDIN ひかえ
_plyinf:
.dc.l 0 *int fg; /* 状態 0x11 演奏中,0x12 演奏中断 */
.dc.l 0 *int track_no; /* 曲番号 */
.dc.l 0 *int time; /* 現在の演奏時間 */
.dc.l 0 *int address; /* 演奏アドレス */
.dc.l 0 *int track_long; /* 演奏中の曲のながさ*/
.dc.l 0 *CD名アドレス
_SetNameAdd:
.dc.l 0 *曲名アドレス
_Ledtta:
.dc.l 0 *LED文字アドレス
_Ledtrk:
.dc.l 0 *LED数値 曲番号
_Ledprg:
.dc.l 0 *LED数値 プログラムナンバー 0;非表示 -1:MAX= -2:INP=
_Ledtim:
.dc.l 0 *LED数値 MSF型
_Ledflg:
.dc.l 0 *LEDその他の状態
_DisSuuzi10:
.dc.b 0 * LED用数字 10の位
_DisSuuzi1:
.dc.b 0 * LED用数字
.even
__COM__S:
EndStatio:*******************常駐部
.globl _fprintf_
_fprintf_:******************(Cライク)
link a6,#0
movem.l d3-d7/a3-a5,-(sp)
move.l 8(a6),d0
move.w d0,FILENO
movea.l 12(a6),a4
lea.l 16(a6),a5
prL1: move.b (a4)+,d1
jbeq pri_end
cmpi.b #'%',d1
jbeq pri_kazu
andi.w #$00FF,d1
move.l d1,-(sp)
jbsr DosFputc
addq.l #4,sp
jbra prL1
pri_kazu:
move.l (a5)+,d7 *数
move.b (a4)+,d1
jbeq pri_end
cmpi.b #'1',d1
jbeq pr_K1
cmpi.b #'2',d1
jbeq pr_K2
cmpi.b #'3',d1
jbeq pr_K3
cmpi.b #'4',d1
jbeq pr_K4
andi.w #$00FF,d1
move.l d1,-(sp)
jbsr DosFputc
addq.l #4,sp
jbra prL1
pr_K4:
divu #1000,d7
move.l d7,d1
addi.b #'0',d1
andi.w #$00FF,d1
move.l d1,-(sp)
jbsr DosFputc
addq.l #4,sp
swap d7
andi.l #$0000FFFF,d7
pr_K3:
divu #100,d7
move.l d7,d1
addi.b #'0',d1
andi.w #$00FF,d1
move.l d1,-(sp)
jbsr DosFputc
addq.l #4,sp
swap d7
andi.l #$0000FFFF,d7
pr_K2:
*move.l d7,d1
divu #10,d7
addi.b #'0',d7
andi.w #$00FF,d7
move.l d7,-(sp)
jbsr DosFputc
addq.l #4,sp
swap d7
pr_K1:
addi.b #'0',d7
andi.w #$00FF,d7
move.l d7,-(sp)
jbsr DosFputc
addq.l #4,sp
jbra prL1
pri_end:
movem.l (sp)+,d3-d7/a3-a5
unlk a6
rts
FILENO:
.dc.w 0
DosFputc:
move.l 4(a7),d0
move.w FILENO(pc),-(sp)
move.w d0,-(sp)
DOS _FPUTC
addq.l #4,sp
rts
MarkerChk:*----------------------------------------
* a0 アドレス
*
*[戻り値] bne ちがう
* beq あっている
cmpa.l #$00F00000,a0
jbcc @f
cmp.l #HEAD1,(a0)
jbne @f
cmp.l #HEAD2,4(a0)
jbne @f
cmpa.l a0,a0 *z=1
@@:
rts
InvChk:*------------------------------------0H`
* a0.l==なら非常駐
* a0.l!=なら常駐
movea.l (a0),a0 *一つ前のポインタ
cmpa.l #$00F00000,a0
jbcc IC1
cmp.l #HEAD1,$0100+(head-SS)(a0)
jbne @f
cmp.l #HEAD2,$0104+(head-SS)(a0)
jbne @f
adda.w #$100,a0 **[SS]のポインタ
rts
@@: **違う
tst.l (a0) *一つ前のポインタ
jbne InvChk *0でない(上へ)
IC1: sub.l a0,a0 *非常駐
rts
AtoI2:*-------------------------------*
move.b (a2),d0
jbeq AtoI2E_
cmpi.b #' ',d0
jbeq AtoI2E_
cmpi.b #'0',d0
jbcs AtoI2E
cmpi.b #'9'+1,d0
jbcs AtoI
AtoI2E:
moveq #-2,d0
rts
AtoI2E_:
moveq #-1,d0
rts
AtoI:*----------------------------------------
* a2 アドレス
*[戻り値] d0.l 数字
moveq #0,d0
move.b (a2),d2
cmpi.b #'$',d2
jbeq AtoHI
@@: move.b (a2)+,d2
subi.b #'0',d2
jbcs AIr
cmpi.b #9,d2
jbhi AIr
andi.l #$0000FF,d2
mulu #10,d0
add.l d2,d0
jbra @b
AIr: subq #1,a2
rts
AtoHI:
*(Hex専用)
move.b (a2)+,d2 *$ skip
@@: move.b (a2)+,d2
subi.b #'0',d2
jbcs AHIL1
cmpi.b #9,d2
jbhi AHIL1
lsl.l #4,d0
add.l d2,d0
jbra @b
AHIL1:
ori.b #$20,d2
subi.b #'a'-'0',d2
jbcs AHIL2
cmpi.b #5,d2
jbhi AHIL2
lsl.l #4,d0
addi.l #10,d0
add.l d2,d0
jbra @b
AHIL2: subq #1,a2
rts
SF equ $7C
SFT5 equ $1
SFPW equ $2
SPP: .dc.l 0
init:*------------------------------------------------------------------
lea usrsp(pc),sp
Print LR1(pc)
** 常駐チェック **
suba.l a1,a1
SUPER
move.l d0,SPP
moveq #0,d1
jbsr InvChk
movea.l a0,a3 *常駐先頭アドレス
move.l a0,ST_CHK *常駐先頭アドレス
movea.l TRP5_,a0
suba #TRP5-head,a0
jbsr MarkerChk
jbne @f
bset #0,d1
@@:
movea.l PWSW_,a0
suba #PWSW-head,a0
jbsr MarkerChk
jbne @f
bset #1,d1
@@:
movea.l B_KEYSNS_,a0
suba #B_KEYSNS-head,a0
jbsr MarkerChk
jbne @f
bset #2,d1
@@:
movea.l BITSNS_,a0
suba #BITSNS-head,a0
jbsr MarkerChk
jbne @f
bset #3,d1
@@:
movea.l MFP_,a0
suba #MFP-head,a0
jbsr MarkerChk
jbne @f
bset #4,d1
@@:
move.w #INTVCG_,-(sp)
DOS _INTVCG
addq.l #2,sp
movea.l d0,a0
suba #INTVCG-head,a0
jbsr MarkerChk
jbne @f
bset #5,d1
@@:
move.w #INTVCS_,-(sp)
DOS _INTVCG
addq.l #2,sp
movea.l d0,a0
suba #INTVCS-head,a0
jbsr MarkerChk
jbne @f
bset #6,d1
@@:
move.l d1,VC_CHK *d1に常駐状態
** 常駐していたらそのデータを引用 **
movea.l ST_CHK(pc),a3
move.l a3,d0
jbeq conl
lea __COM__-SS(a3),a0
lea __COM__(pc),a1
move.l #(__COM__S-__COM__)/2-1,d0
@@: move.w (a0)+,(a1)+
dbra d0,@b
*move.w #1,_KeySwi
clr.w MuTmMod
conl:
** SCSI ROM 位置チェック **
lea $FC0024,a1
cmpi.l #'SCSI',(a1)
beq SUC_L1
lea $EA0044,a1
cmpi.l #'SCSI',(a1)
jbeq @f
pea LRSCRM(pc)
jbra PE *end
@@: **スロット
lea $EA0000,a1
jbra @f
SUC_L1: **内蔵モデル
lea $E96020,a1
@@: move.l a1,_SCSI_ROMB
** 環境変数 CDROM チェック **
pea GETBUF(pc)
clr.l -(sp)
pea CDROM_NAME(pc)
DOS _GETENV
lea 12(sp),sp
tst.l d0
jbmi @f
move.b GETBUF(pc),d0
subi.b #'0',d0
jbmi @f
cmpi.b #8,d0
jbcc @f
andi.w #$00FF,d0
move.w d0,_SCSI_ID
@@:
move.l ST_CHK(pc),d0
jbne conl2
movem.l d0-d2/a0-a2,-(sp)
jbsr _CdListSub
movem.l (sp)+,d0-d2/a0-a2
conl2:
** コマンドラインチェック **
tst.b (a2)+ *スキップ
sw: move.b (a2)+,d0
jbeq swend
cmpi.b #' ',d0
jbeq sw
cmpi.b #$09,d0 *tab
jbeq sw
cmpi.b #'-',d0
jbeq swc
cmpi.b #'/',d0
jbeq swc
cmpi.b #'0',d0
jbcs @f
cmpi.b #'9'+1,d0
jbcs OwnPlay
@@:
ori.b #$20,d0 *小文字化!
cmpi.b #'a',d0
jbeq AllPlay
エラー:
pea LR6(pc)
clr.w eddip *常駐エリアにデータを戻すか
jbra PE *end
swc: **スイッチ判断
move.b (a2)+,d0
jbeq エラー
cmpi.b #'?',d0
jbeq help
ori.b #$20,d0 *小文字化!
cmpi.b #'r',d0
jbeq swcm
cmpi.b #'i',d0
jbeq swcm
cmpi.b #'l',d0
jbeq swcm
cmpi.b #'d',d0
jbeq swcm
cmpi.b #'e',d0
jbeq eswc
cmpi.b #'b',d0
jbeq bswc
cmpi.b #'t',d0
jbeq tswc
cmpi.b #'p',d0
jbeq pswc
cmpi.b #'k',d0
jbeq kswc
cmpi.b #'f',d0
jbeq fswc
cmpi.b #'o',d0
jbeq oswc
cmpi.b #'x',d0
jbeq xswc
cmpi.b #'a',d0
jbeq aswc
cmpi.b #'m',d0
jbeq mswc
cmpi.b #'z',d0
jbeq zswc
cmpi.b #'s',d0
jbeq sswc *CD_STOP
cmpi.b #'c',d0
jbeq cswc *CD_CONT
cmpi.b #'h',d0
jbeq help
pea LR7(pc)
clr.w eddip *常駐エリアにデータを戻すか
jbra PE *end
swcoo: .dc.w 0 *なにかコマンドをやったら1
swcom: .dc.w 0 *最終的なコマンド
swtr: .dc.w 0 * /trがある?
swpw: .dc.w 0 * /pwがある?
sw_e: .dc.w 0 * /eがある?
eddip: .dc.w 0 *常駐エリアにデータを戻すか
swend:**************************************
move.b swcom(pc),d0
cmpi.b #'r',d0
jbeq free
cmpi.b #'i',d0
jbeq keep
cmpi.b #'d',d0
jbeq dswc *CD_ERY
cmpi.b #'l',d0
jbeq lswc *CD_LIST
cmpi.b #'m',d0
jbeq m2swc *CD_MEM_LIST
move.w swcoo(pc),d0 *なにかコマンドをやったら1
jbne PEE
movea.l SPP,a1
SUPER
jbsr _cd_play_inf
jbra PEE
swcm:**************************************
move.b d0,swcom
move.b (a2),swcom+1
jbeq @f
addq.l #1,a2
@@: jbra sw
eswc:**************************************
tst.w sw_e * /eがある?
jbne エラー
move.w #-1,sw_e
pea GETBUF(pc)
clr.l -(sp)
pea CDCSW_NAME(pc)
DOS _GETENV
lea 12(sp),sp
tst.l d0
jbmi @f
lea GETBUF(pc),a2
@@: jbra sw
bswc:**************************************
move.w #1,swcoo
jbsr AtoI
lea CmdC_List_L1(pc),a0 *ノーマル用
tst.w d0
jbeq @f
lea CmdC_List_L2(pc),a0 *CR用
cmpi.b #$1,d0
jbeq @f
lea CmdC_List_L3(pc),a0 *compact用
@@:
move.l (a0),CmdC_List
move.l (a0),CmdC_ListD
move.l 4(a0),CmdC_List+4
move.l 4(a0),CmdC_ListD+4
move.l 8(a0),CmdC_List+8
move.l 8(a0),CmdC_ListD+8
move.l 12(a0),CmdC_List+12
move.l 12(a0),CmdC_ListD+12
move.w #1,eddip *バックライト
jbra sw
mswc:**************************************
move.b (a2),d2
jbeq swcm
cmpi.b #' ',d2
jbeq swcm
ori.b #$20,d2 *小文字化!
cmpi.b #'u',d2
jbne エラー
move.w #-1,_CdcMode *1:しようする
move.w #1,swcoo
addq.l #1,a2
move.w #-1,_CdcMode *1:しようする
move.w #1,MuTmMod *0:ノーマル 1:強引にキーベクタを書き替え
move.w #1,_KeySwi
move.w #1,eddip *バックライト
jbra sw
tswc:**************************************
move.w #1,swcoo
move.b (a2),d0
cmpi.b #'0',d0
jbne @f
addq.l #1,a2
moveq #0,d0
jbra tswc_L1
@@:
jbsr AtoI
tst.w d0
jbeq trswc
tst.w d0
jbeq エラー
tswc_L1:
move.w d0,_KeyTDCT
move.w #1,eddip *バックライト
move.b (a2),d0
cmpi.b #',',d0
jbne sw
addq.l #1,a2
jbsr AtoI
tst.w d0
jbeq エラー
move.w d0,_PlyWitT
move.w #1,eddip *バックライト
jbra sw
trswc
move.b (a2),d0
jbeq エラー
ori.b #$20,d0 *小文字化!
cmpi.b #'r',d0
jbne エラー
move.l ST_CHK(pc),d0
jbeq @f
Print LRERSW(pc)
jbra PEE
@@:
addq.l #1,a2
move.w #1,swtr * /trがある?
jbra sw
pswc:**************************************
move.w #1,swcoo
move.b (a2),d0
jbeq エラー
ori.b #$20,d0 *小文字化!
cmpi.b #'w',d0
jbne エラー
move.l ST_CHK(pc),d0
jbeq @f
Print LRERSW(pc)
jbra PEE
@@:
addq.l #1,a2
move.w #1,swpw * /pwがある?
jbra sw
kswc:**************************************
move.w #1,swcoo
jbsr AtoI
andi.w #$1FF,d0
jbne @f
move.b (a2),d0
jbeq エラー
ori.b #$20,d0 *小文字化!
cmpi.b #'s',d0
jbne エラー
addq.l #1,a2
clr.w _KeySwi
move.w #1,eddip *バックライト
jbra sw
@@: move.l d0,d2
andi.l #$1E0,d2
lsl.l #8,d2 *11
lsl.l #3,d2
move.l d2,_SFTK
move.w d0,d2
andi.w #$001F,d2
ror.w #3,d2
or.l d2,_SFTK
move.w #1,eddip *バックライト
jbra sw
* | 0 0 0 0 OPT.2 OPT.1 CTRL SHIFT |
* |XF3 XF2 XF1 0 0 0 0 0| 0 0 0 0 0 0 XF5 XF4
* OPT.2 OPT.1 CTRL SHIFT XF5 XF4 XF3 XF2 XF1
aswc:**************************************
jbsr _CdcModeOn
move.w #1,swcoo
move.w #-1,_AutoMode *0:ノーマル 1:オート
move.w #1,eddip *バックライト
jbra sw
fswc:**************************************
jbsr _CdcModeOn
move.w #1,swcoo
movem.l d0-d7/a0-a6,-(sp)
move.l #1,-(sp)
jbsr _CdPlay_restart
addq.l #4,sp
movem.l d0-d7/a0-a6,-(sp)
move.w #1,eddip *バックライト
jbra sw
xswc:**************************************
move.w #1,swcoo
jbsr AtoI
cmpi.w #128-(36+1+10)+1,d0
jbcc エラー
move.l d0,d7 *x
move.b (a2)+,d0
jbeq エラー
cmpi.b #',',d0
jbne エラー
jbsr AtoI
cmpi.w #63+1,d0
jbcc エラー
mulu #$800,d0
add.l d0,d7
addi.l #$E40000,d7
movem.l d0/d1/a2,-(sp)
movea.l ST_CHK(pc),a3
move.l a3,d0
jbeq xswcL
move.l d7,_DRAWADDS-SS(a3)
jbsr FnkBerChk
jbeq @f
jbsr KillLeds
@@:
xswcL: movem.l (sp)+,d0/d1/a2
move.l d7,_DRAWADDS
move.w #1,eddip *バックライト
jbra sw
zswc:**************************************
move.l ST_CHK(pc),d0
jbeq @f
Print LRERSW(pc)
jbra PEE
@@:
move.b (a2),d0
jbeq zswc_L1
cmpi.b #' ',d0
jbeq zswc_L1
move.b 1(a2),d7
cmpi.b #':',d7
jbne エラー
ori.b #$20,d0 *小文字化!
subi.b #'a',d0
jbcs エラー
cmpi.b #26,d0
jbcc エラー
addq.l #2,a2
andi.l #$00FF,d0
addq.l #1,d0
jbra zswc_L2
zswc_L1:
moveq #0,d0
zswc_L2:
movem.l d1-d2/a0-a2,-(sp)
move.l d0,-(sp)
jbsr _Chk_Cdd
addq.l #4,sp
movem.l (sp)+,d1-d2/a0-a2
tst.l d0
jbne PEE
move.w #1,eddip *バックライト
jbra sw
oswc:**************************************
move.w #1,swcoo
move.b (a2)+,d0
jbeq エラー
ori.b #$20,d0 *小文字化!
cmpi.b #'n',d0
jbeq os_on
cmpi.b #'f',d0
jbne エラー
os_off:
move.b (a2),d0 *'f'の字をスキップ
ori.b #$20,d0 *小文字化!
cmpi.b #'f',d0
jbne @f
addq.l #1,a2
@@:
movem.l d1/a2,-(sp)
move.l ST_CHK(pc),d0
jbeq @f
jbsr FnkBerChk
jbeq @f
jbsr KillLeds
@@:
clr.w _CdcMode *0:停止
clr.w _CDIN *0:CDは入っていない 1:入っている
clr.b _CHARBUF *LED文字
movem.l (sp)+,d1/a2
move.w #1,eddip *バックライト
jbra sw
os_on:
move.w #-1,_CdcMode *1:しようする
move.w #1,_CDIN *0:CDは入っていない 1:入っている
move.w #1,_KeySwi
move.w #1,eddip *バックライト
jbra sw
sswc:***************************************
*CDのストップ -s
jbsr _CdcModeOn
move.w #1,swcoo
movem.l d0-d7/a0-a6,-(sp)
jbsr _cd_play_pause
move.w #-1,_PauseMode *0:特に 1:ポーズ中
movem.l d0-d7/a0-a6,-(sp)
move.w #1,eddip *バックライト
jbra sw
cswc:**************************************
*CDのリスタート -c
jbsr _CdcModeOn
move.w #1,swcoo
movem.l d0-d7/a0-a6,-(sp)
jbsr _cd_play_re
clr.w _PauseMode *0:特に 1:ポーズ中
movem.l d0-d7/a0-a6,-(sp)
move.w #1,eddip *バックライト
jbra sw
AllPlay:**************************************
move.w #1,swcoo
move.b (a2)+,d0
ori.b #$20,d0 *小文字化!
cmpi.b #'l',d0
jbne エラー
move.b (a2)+,d0
ori.b #$20,d0 *小文字化!
cmpi.b #'l',d0
jbne エラー
move.b (a2),d0
jbeq @f
cmpi.b #$20,d0
jbeq @f
jbne エラー
@@:
movem.l d1/a2/a3,-(sp)
move.l #-1,-(sp)
move.l #-1,-(sp)
jbra PlE
OwnPlay:**************************************
move.w #1,swcoo
subq #1,a2
jbsr AtoMSF
tst.l d0
jbpl Plcln
jbsr AtoI
move.l d0,d7
jbeq エラー
move.b (a2),d0
jbeq Pl1
cmpi.b #' ',d0
jbeq Pl1
cmpi.b #'-',d0
jbeq Plmi
cmpi.b #'/',d0
jbeq Plwaru
jbra エラー
Plwaru: * t/m:s:f
addq.l #1,a2 * [/] skip
move.l d7,buf2
move.l a0,-(sp)
add.w d7,d7
add.w d7,d7
lea _ListStTm(pc),a0
move.l (a0,d7.w),buf3
movea.l (sp)+,a0
jbsr AtoMSF
tst.l d0
jbmi エラー
movem.l d1-d2/a0-a2,-(sp)
move.l buf3(pc),-(sp)
move.l d0,-(sp)
bsr _addtime
addq.l #8,sp
movem.l (sp)+,d1-d2/a0-a2
*addi.l #$01000000,d0
move.l d0,buf *開始アドレス
move.b (a2),d0
jbeq Plwaru2
cmpi.b #' ',d0
jbeq Plwaru2
cmpi.b #'-',d0
jbne エラー
addq.l #1,a2 * [-] skip
move.b (a2),d0
jbeq Plwaru1
cmpi.b #' ',d0
jbeq Plwaru1
jbsr AtoMSF
tst.l d0
jbmi エラー
* t/m:s:f - m:s:f
movem.l d1-d2/a0-a2,-(sp)
move.l buf3(pc),-(sp)
move.l d0,-(sp)
bsr _addtime
addq.l #8,sp
movem.l (sp)+,d1-d2/a0-a2
*addi.l #$01000000,d0
movem.l d1/a2/a3,-(sp)
move.l d0,-(sp)
move.l buf(pc),-(sp)
jbra PlE
Plwaru1: * t/m:s:f -
movem.l d1/a2/a3,-(sp)
move.l #-1,-(sp)
move.l buf(pc),-(sp)
jbra PlE
Plwaru2: * t/m:s:f
movem.l d1/a2/a3,-(sp)
move.l buf2(pc),-(sp)
move.l buf(pc),-(sp)
jbra PlE
Plcln: * m:s:f [-[ m:s:f ]]
*addi.l #$01000000,d0
move.l d0,buf
move.b (a2),d0
jbeq Plcln1
cmpi.b #' ',d0
jbeq Plcln1
cmpi.b #'-',d0
jbne エラー
addq.l #1,a2 * [-] skip
jbsr AtoMSF
tst.l d0
jbpl @f
move.b (a2),d0
jbeq Plcln1
cmpi.b #' ',d0
jbeq Plcln1
jbra エラー
@@: * m:s:f - m:s:f
*addi.l #$01000000,d0
movem.l d1/a2/a3,-(sp)
move.l d0,-(sp)
move.l buf(pc),-(sp)
jbra PlE
Plcln1: * m:s:f [-]
movem.l d1/a2/a3,-(sp)
move.l #-1,-(sp)
move.l buf(pc),-(sp)
jbra PlE
Pl1: *--------- n
movem.l d1/a2/a3,-(sp)
move.l d7,-(sp)
move.l d7,-(sp)
jbra PlE
Plmi: *---------- n-n
addq.l #1,a2 * [-] skip
jbsr AtoI2
cmpi.l #-1,d0
jbeq Pl2
jbmi エラー
movem.l d1/a2/a3,-(sp)
move.l d0,-(sp)
move.l d7,-(sp)
jbra PlE
Pl2: *--------- n-
movem.l d1/a2/a3,-(sp)
move.l #-1,-(sp)
move.l d7,-(sp)
*bra PlE
PlE:
jbsr _cd_play
addq.l #8,sp
movem.l d0/d2/a0/a1,-(sp)
jbsr _MemChkT
movem.l (sp)+,d0/d2/a0/a1
movem.l (sp)+,d1/a2/a3
clr.w _PauseMode *0:特に 1:ポーズ中
move.w #1,eddip *バックライト
jbra sw
buf: .dc.l 0
buf2: .dc.l 0
buf3: .dc.l 0
AtoMSF: *-----------------
* m:s:f
move.l a2,-(sp)
jbsr AtoI2 *m
move.l d0,d7
jbmi AtoMSF_E
move.b (a2),d0
cmpi.b #':',d0
jbeq @f
cmpi.b #'"',d0
jbeq @f
cmpi.b #$2C,d0 * [']
jbne AtoMSF_E
@@: addq.l #1,a2 * [:] skip
swap d7
jbsr AtoI2 *s
tst.l d0
jbmi AtoMSF_E
lsl.l #8,d0
or.l d0,d7
move.b (a2),d0
cmpi.b #':',d0
jbeq @f
cmpi.b #'"',d0
jbeq @f
cmpi.b #$2C,d0 * [']
jbne AtoMSF_E
@@: addq.l #1,a2 * [:] skip
jbsr AtoI2 *f
tst.l d0
jbmi AtoMSF_E
or.l d7,d0
addq.l #4,sp
rts
AtoMSF_E:
movea.l (sp)+,a2
moveq #-1,d0
rts
help:**************************************
*ヘルプ表示
pea LRH(pc)
clr.w eddip *常駐エリアにデータを戻すか
jbra PE *end
dswc:**************************************
*CDのリスト -d
move.b swcom+1(pc),d1
jbeq dswc_chks
cmpi.b #' ',d1
jbeq dswc_chks
cmpi.b #'2',d1
jbeq dswc_chks
ori.b #$20,d1 *小文字化!
cmpi.b #'b',d1
jbne エラー
************デバグモード
clr.w eddip *バックライト
move.l ST_CHK(pc),d0
jbne @f
pea LR8(pc) **非常駐エラー
jbra PE
@@:
movea.l SPP,a1
SUPER
jbsr _debug_mode
jbra PEE
dswc_chks: ************
jbsr _CdListRead *チェック
tst.l _CdListS *CDLISTにあるなら 1
jbeq @f
Print LRNOFL(pc)
jbra PEE
@@: ** 環境変数 CDCLIST チェック **
pea CDCLIST_FILENAME(pc)
clr.l -(sp)
pea CDCLIST_NAME(pc)
DOS _GETENV
lea 12(sp),sp
tst.l d0
jbmi dswc_ERR1
move.w #1,-(sp)
pea CDCLIST_FILENAME(pc)
DOS _OPEN
addq.l #6,sp
move.w d0,Hendl
tst.l d0
jbmi dswc_NEW
move.w #2,-(sp)
move.l #-1,-(sp)
move.w Hendl(pc),-(sp)
DOS _SEEK
addq.l #8,sp
jbra CD_LW
dswc_NEW:
move.w #%0100000,-(sp)
pea CDCLIST_FILENAME(pc)
DOS _CREATE
addq.l #6,sp
move.w d0,Hendl
tst.l d0
jbmi dswc_ERR2 *エラー
CD_LW:
movea.l ST_CHK(pc),a3
move.l a3,d0
jbeq @f
move.w _CdcMode-SS(a3),B_CdcMode
move.w _KeySwi-SS(a3),B_KeySwi
clr.w _CdcMode-SS(a3)
clr.w _KeySwi-SS(a3)
@@:
moveq #0,d0
move.b swcom+1(pc),d1
cmpi.b #'2',d1
bne @f
moveq #1,d0
@@: move.l d0,-(sp)
moveq #0,d0
move.w Hendl(pc),d0
move.l d0,-(sp)
bsr _cd_play_entry
addq.l #8,sp
move.w Hendl(pc),-(sp)
DOS _CLOSE
addq.l #2,sp
movea.l ST_CHK(pc),a3
move.l a3,d0
jbeq @f
move.w B_CdcMode(pc),_CdcMode-SS(a3) *戻す
move.w B_KeySwi(pc),_KeySwi-SS(a3)
@@: jbra PEE
dswc_ERR1:
clr.b CDCLIST_FILENAME *リストファイル無し
Print LRLIEV(pc)
jbra PEE
dswc_ERR2:
clr.b CDCLIST_FILENAME *リストファイル無し
Print LRLIER(pc)
jbra PEE
B_CdcMode: .dc.w 0
B_KeySwi: .dc.w 0
lswc:**************************************
*CDのリスト -l
move.b swcom+1(pc),d1
jbeq @f
cmpi.b #'0',d1
jbeq @f
cmpi.b #'1',d1
jbeq lswc_L1
cmpi.b #'2',d1
jbeq lswc_L2
cmpi.b #' ',d1
jbne エラー
@@:
jbsr _CdListRead *チェック
move.l #0,-(sp)
jbra lswc_NOMEE
lswc_L1:
jbsr _CdListRead *チェック
move.l #1,-(sp)
jbra lswc_NOMEE
lswc_L2:
jbsr _CdListRead *チェック
move.l #2,-(sp)
lswc_NOMEE:
jbsr _cd_play_list
addq.l #4,sp
jbra PEE
m2swc:**************************************
*CDのリスト -m
jbsr _cd_mem_list
jbra PEE
keep: ************************** 常駐させる
movem.l d0-d7/a0-a6,-(sp)
jbsr _CDROM_chk
tst.l d0
jbeq keepL4
cmpi.l #-3,d0
jbne keepLL
**CD-ROMじゃ無い
movem.l (sp)+,d0-d7/a0-a6
pea LRNOID(pc)
clr.w eddip *常駐エリアにデータを戻すか
jbra PE *end
keepL4:
Print LRLTRD(pc)
jbsr _CdListRead_C
jbpl @f
cmpi.l #-100,d0
jbne keepLL
Print LRNOCD(pc)
jbra keepLL
@@: Print _CdName(pc)
Print LRLTOK(pc)
keepLL: movem.l (sp)+,d0-d7/a0-a6
tst.w _ExTrak * 1;拡張トラックあり
jbeq @f
Print LREXTK(pc)
@@:
tst.w _CddevSw * 1;計測ドライバー使用
jbeq @f
Print LRCDDS(pc)
@@:
movea.l ST_CHK(pc),a3
move.l a3,d0
jbeq keepL1
*既に常駐、設定変更
clr.w IocsSwc *白帯で1になったまま終わってしまうともう動かないので初期化
move.w #1,eddip *バックライト
pea LR5(pc)
jbra PE *end
keepL1: **セット
**TRAP 5 チェック**
tst.w swtr *sw trがある?
jbne @f
movea.l TRP5_,a0
cmpa.l #$00F00000,a0
jbcc @f
pea LRTP5(pc)
jbra PE *end
@@:
.if 0
clr.w _TrkNo
pea _plyinf(pc)
jbsr _ChkPly
addq.l #4,sp
tst.l d0
jbne keepL3
jbsr _ChkPlyDisp
move.l _plyinf(pc),d0
cmpi.b #$11,d0
jbeq keepL2
cmpi.b #$12,d0
jbeq keepL2
clr.w _TrkNo
jbra keepL3
keepL2:
move.l _plyinf+4(pc),d0
move.w d0,_TrkNo
move.w d0,_TrkNoS
jbsr _MemChkT
jbsr _SetTrkLong
keepL3:
.else
movem.l d0-d2/a0-a2,-(sp)
jbsr _ZeroUnit
movem.l (sp)+,d0-d2/a0-a2
.endif
move.w #SF,_STFLAG *常駐チェック用
tst.w swtr *sw trがある?
jbne @f
ori.w #SFT5,_STFLAG *常駐チェック用 SFT5;trap5未使用
move.l TRP5_,TRP5_JMP+2
move.l #TRP5,TRP5_
@@:
tst.w swpw *sw pwがある?
jbeq @f
ori.w #SFPW,_STFLAG *常駐チェック用 PWSW;リセット時CD停止
move.l PWSW_,PWSW_JMP+2
move.l #PWSW,PWSW_
@@:
move.l B_KEYSNS_,B_KEYSNS_JMP+2
move.l #B_KEYSNS,B_KEYSNS_
move.l BITSNS_,BITSNS_JMP+2
move.l #BITSNS,BITSNS_
move.l MFP_,MFP_JMP+2
move.l #MFP,MFP_
pea INTVCS
move.w #INTVCS_,-(sp)
DOS _INTVCS
addq.l #6,sp
move.l d0,INTVCS_JMP+2
pea INTVCG
move.w #INTVCG_,-(sp)
DOS _INTVCS
addq.l #6,sp
move.l d0,INTVCG_JMP+2
jbsr _WaitCC *今の1/100s
*add.w _PlyWitT(pc),_KeyTD *すぐに実行されるように
jbsr _ChkCdRom
tst.w _CdcMode *0:停止中 1:運転中
jbeq @f
jbsr _B_KLE_D
@@:
Print LRKP(pc)
clr.w -(sp)
lea.l EndStatio(pc),a0
suba.l #StartStatio,a0
move.l a0,-(sp)
*move.l #EndStatio-StartStatio,-(sp)
DOS _KEEPPR
free: *****************************常駐解除
movea.l ST_CHK(pc),a3
move.l a3,d0
jbne @f
pea LR8(pc) **非常駐
clr.w eddip *常駐エリアにデータを戻すか
jbra PE *end
@@:
move.l VC_CHK(pc),d1
cmp.w _STFLAG(pc),d1
jbeq @f
pea LR4(pc) **ベクタが占領
clr.w eddip *常駐エリアにデータを戻すか
jbra PE *end
@@:
move.w _STFLAG(pc),d0 *常駐チェック用
andi.w #SFT5,d0
jbeq @f
move.l (TRP5_JMP-SS)+2(a3),TRP5_
@@:
move.w _STFLAG(pc),d0 *常駐チェック用
andi.w #SFPW,d0
jbeq @f
move.l (PWSW_JMP-SS)+2(a3),PWSW_
@@:
move.l (B_KEYSNS_JMP-SS)+2(a3),B_KEYSNS_
move.l (BITSNS_JMP-SS)+2(a3),BITSNS_
move.l (MFP_JMP-SS)+2(a3),MFP_
move.l (INTVCS_JMP-SS)+2(a3),-(sp)
move.w #INTVCS_,-(sp)
DOS _INTVCS
addq.l #6,sp
move.l (INTVCG_JMP-SS)+2(a3),-(sp)
move.w #INTVCG_,-(sp)
DOS _INTVCS
addq.l #6,sp
jbsr FnkBerChk
jbeq @f
jbsr KillLeds
@@:
sub.l #$00000F0,a3
move.l a3,-(sp)
DOS _MFREE
addq.l #4,sp
suba.l a3,a3
pea LR3(pc)
PE: DOS _PRINT
addq.l #4,sp
PEE:
tst.w eddip *バックライト
jbeq @f
jbsr HenSuSet
@@:
DOS _EXIT
_CdListRead_C:*************コマンドライン用
jbsr _CdListRead
jbpl HenSuSet
rts
HenSuSet:** 常駐していたらそのデータ流し込む1**
move.l ST_CHK(pc),d0
jbne @f
rts
@@:
movem.l d0-d2/a0-a3,-(sp)
jbsr _ChkCdRom
tst.w _CdcMode *0:停止中 1:運転中
jbeq @f
jbsr _B_KLE_D
@@:
movea.l ST_CHK(pc),a3
lea __COM__(pc),a0
lea __COM__-SS(a3),a1
move.w #(__COM__S-__COM__)/2-1,d0
@@: move.w (a0)+,(a1)+
dbra d0,@b
movem.l (sp)+,d0-d2/a0-a3
rts
CmdC_List_L1: *ノーマル用
defccl
CmdC_List_L2: *CR対応用
.dc.b %0000_0010 **│ 6& │ 5% │ 4$ │ 3# │ 2" │ 1! │ ESC │未定義
.dc.b %1000_0000 **│ BS │ \| │ ^~ │ -= │ 0 │ 9) │ 8( │ 7'
.dc.b %0001_1001 **│ U │ Y │ T │ R │ E │ W │ Q │ TAB
.dc.b %0011_0000 **│ S │ A │ [CR] │ [ │ @` │ P │ O │ I
.dc.b %0000_0000 **│ ;+ │ L │ K │ J │ H │ G │ F │ D
.dc.b %0000_0010 **│ N │ B │ V │ C │ X │ Z │ ] │ :*
.dc.b %1100_0000 **│ DEL │ HOME │ [SP] │ _ │ /? │ .> │ ,< │ M
.dc.b %1111_1111 **│ CLR │ ↓ │ → │ ↑ │ ← │ UNDO │Rolldn│Rollup
.dc.b %1111_1111 **│ 4 │ + │ 9 │ 8 │ 7 │ - │ * │ /
.dc.b %1111_1111 **│ 0 │ ENTER│ 3 │ 2 │ 1 │ = │ 6 │ 5
.dc.b %0000_1011 **│ XF3 │ XF2 │ XF1 │ HELP │ 登録 │ 記号 │ . │ ,
.dc.b %0000_0000 **│ ヒカナ │ INS │ CAPS │コード│ ローマ字│ かな │ XF5 │ XF4
.dc.b %0000_0000 **│ F5 │ F4 │ F3 │ F2 │ F1 │ COPY │ BREAK│ 全角
.dc.b %0000_0000 **│未定義│未定義│未定義│ F10 │ F9 │ F8 │ F7 │ F6
.dc.b %0000_0000 **│未定義│未定義│未定義│未定義│ OPT.2│ OPT.1│ CTRL │ SHIFT
.dc.b %0000_0000 **│未定義│未定義│未定義│未定義│未定義│未定義│未定義│未定義
CmdC_List_L3: *compact用
.dc.b %0000_0010 **│ 6& │ 5% │ 4$ │ 3# │ 2" │ 1! │ ESC │未定義
.dc.b %1001_1111 **│ BS │ \| │ ^~ │ -= │ 0 │ 9) │ 8( │ 7'
.dc.b %1001_1001 **│ U │ Y │ T │ R │ E │ W │ Q │ TAB
.dc.b %0011_0111 **│ S │ A │ [CR] │ [ │ @` │ P │ O │ I
.dc.b %1111_0000 **│ ;+ │ L │ K │ J │ H │ G │ F │ D
.dc.b %0000_0010 **│ N │ B │ V │ C │ X │ Z │ ] │ :*
.dc.b %1101_1111 **│ DEL │ HOME │ [SP] │ _ │ /? │ .> │ ,< │ M
.dc.b %1111_1111 **│ CLR │ ↓ │ → │ ↑ │ ← │ UNDO │Rolldn│Rollup
.dc.b %1111_1111 **│ 4 │ + │ 9 │ 8 │ 7 │ - │ * │ /
.dc.b %1111_1111 **│ 0 │ ENTER│ 3 │ 2 │ 1 │ = │ 6 │ 5
.dc.b %0000_1011 **│ XF3 │ XF2 │ XF1 │ HELP │ 登録 │ 記号 │ . │ ,
.dc.b %0000_0000 **│ ヒカナ │ INS │ CAPS │コード│ ローマ字│ かな │ XF5 │ XF4
.dc.b %0000_0000 **│ F5 │ F4 │ F3 │ F2 │ F1 │ COPY │ BREAK│ 全角
.dc.b %0000_0000 **│未定義│未定義│未定義│ F10 │ F9 │ F8 │ F7 │ F6
.dc.b %0000_0000 **│未定義│未定義│未定義│未定義│ OPT.2│ OPT.1│ CTRL │ SHIFT
.dc.b %0000_0000 **│未定義│未定義│未定義│未定義│未定義│未定義│未定義│未定義
ST_CHK:
.dc.l 0
VC_CHK:
.dc.l 0
GETBUF:
.ds.b 256
.even
CDROM_NAME:
.dc.b 'CDROM',0
.even
CDCSW_NAME:
.dc.b 'CDCSW',0
.even
LRKP: .dc.b ' 常駐しました。 ',$0d,$0a,0
LRTP5: .dc.b ' TRAP #5が使用されているようです。常駐しません。',$0d,$0a,0
LR3: dc.b ' 常駐解除しました。 ',$0d,$0a,0
LR4: .dc.b ' ベクタが占領されています。',$0d,$0a,0
LR5: .dc.b ' 設定を変更しました。 ',$0d,$0a,0
LR6: .dc.b ' コマンドラインが異常です。',$0d,$0a,0
LR7: .dc.b ' スイッチが異常です。 ',$0d,$0a,0
LR8: .dc.b ' 常駐していません。 ',$0d,$0a,0
LRLTRD: .dc.b ' タイトルリストファイルとCDのチェック中です。',$0d,$0a,0
LRLTOK: .dc.b ' タイトルリストファイルにありました。',$0d,$0a,0
LRLTBD: .dc.b ' タイトルリストファイルにはありません。',$0d,$0a,0
LREXTK: .dc.b ' 拡張トラックを使用しています。',$0d,$0a,0
LRCDDS: .dc.b ' 計測技研CD-ROM DRIVER IOCTRL CALLを使用します。',$0d,$0a,0
LRNOID: .dc.b ' 環境変数 CDROM のIDの装置は、CD-ROM ではないようです。',$0d,$0a
.dc.b ' 常駐しません。',$0d,$0a,0
LRERSW: .dc.b ' /Z,/TR,/PW は常駐時のみ有効なコマンドです。',$0d,$0a,0
LRNOCD: .dc.b ' CDが準備されていません。',$0d,$0a,0
LRLIEV: .dc.b ' 環境変数 CDCLIST が定義されていません。',$0d,$0a,0
LRLIER: .dc.b ' 環境変数 CDCLIST の内容が異常です。',$0d,$0a,0
LRNOFL: .dc.b ' このCDは既に登録されています。',$0d,$0a,0
LRSCRM: .dc.b ' SCSI ROMがありません??',$0d,$0a,0
LRH:
.dc.b $0d,$0a
.dc.b '使用法:CDC.x [switch]|[曲番号(時間)[-[曲番号(時間)]]]|[ALL]',$0d,$0a
.dc.b ' 曲番号 : 演奏するCDの曲番号を指定する。',$0d,$0a
.dc.b ' u:v:w- : u分v秒w~最後まで演奏します。',$0d,$0a
.dc.b ' u:v:w-x:y:z : u分v秒w~x分y秒zまで演奏します。',$0d,$0a
.dc.b ' ?/u:v:x- : ? 曲目のu分v秒w~最後まで演奏します。',$0d,$0a
.dc.b ' ?/u:v:w-x:y:z : ? 曲目のu分v秒w~x分y秒zまで演奏します。',$0d,$0a
.dc.b ' ALL : 全曲演奏する。',$0d,$0a
.dc.b ' switch :',$0d,$0a
.dc.b ' 無し ・・ 現在のCD-ROMの状態を表示します。',$0d,$0a
.dc.b ' /I ・・・・ 常駐します。',$0d,$0a
.dc.b ' /R ・・・・ 常駐解除します。',$0d,$0a
.dc.b ' /L ・・・・ CD-ROMの演奏時間を一覧します。',$0d,$0a
.dc.b ' /L2 ・・・ CD-ROMの演奏時間を一覧します(拡張曲名,中間曲名対応)。',$0d,$0a
*.dc.b ' /D0 ・・・ CD-ROMとタイトルリストファイルのチェックをします。',$0d,$0a
.dc.b ' /D ・・・・ CD-ROMをタイトルリストファイルに追加します。',$0d,$0a
.dc.b ' /D2 ・・・ CD-ROMをタイトルリストファイルに追加します(index対応)。',$0d,$0a
.dc.b ' /M ・・・・ 現在のプログラム状態表示します。',$0d,$0a
*.dc.b ' /Z ・・・・ 計測CDDEV.SYSのIOCTRLを使用します(常駐時のみ有効)。',$0d,$0a
*.dc.b ' /TR ・・・ trap5を使用しない(常駐時のみ有効)。',$0d,$0a
.dc.b ' /PW ・・・ 電源off時 CDを止める様にする(常駐時のみ有効)。',$0d,$0a
.dc.b $0d,$0a
.dc.b ' /S,/C ・ 演奏を一時停止,再開します。',$0d,$0a
*.dc.b ' /F ・・・・ 演奏中、次の曲へスキップさせます。',$0d,$0a
.dc.b ' /A ・・・・ オートモードにします。',$0d,$0a
.dc.b ' /OFF ・・ CDC.xの機能を停止します。',$0d,$0a
*.dc.b ' /ON ・・・ CDC.xの機能を再開します。キー入力禁止も解除します。',$0d,$0a
*.dc.b ' /KS ・・・ CDC.xのキー操作を使えないようにする(解除は-ON))',$0d,$0a
.dc.b ' /T[m] ・ CDC.xの割り込みタイミングを 1/100s単位で設定します(def.m=100)',$0d,$0a
.dc.b ' /X[x],[y]・ CDC.xのLED部の表示位置を設定します(def.x=51,y=29)',$0d,$0a
.dc.b ' /K[n] ・ CDC.x機能のシフトキー設定(def.8 = [XF4])。[XF1]=1 : [XF1]=2 : [XF3]=4',$0d,$0a
.dc.b ' [XF4]=8 : [XF5]=16 : [SHIFT]=32 : [CTRL]=64 : [OPT1]=128 : [OPT2]=256',$0d,$0a
.dc.b ' /B[n]・・ n=2で compactキーボードモードにする。(def. n=0)',$0d,$0a
*.dc.b ' /MU ・・・ MUTERMモード。強引にキーベクタをCDC.xにものにする。',$0d,$0a
.dc.b ' /DB ・・・ デバッグモード。CD-DA チェッカー。',$0d,$0a
.dc.b ' /E ・・・・ 環境変数 CDCSW を参照します(以下のスイッチは無視されます)',$0d,$0a
.even
CR: .dc.b $0d,$0a,0
.even
LR1: .dc.b 'X68k AUDIO-',$1B,'[37mCD C',$1B,'[mONTROLER Version 1.00 Copyright 1994 1995 TNB製作所',$0d,$0a
*.dc.b ' Orig."CD2PCM.x" by WATA',$0d,$0a
.dc.b 0
.even